package cn.lg.soar.system.account.service;

import cn.lg.soar.system.account.model.*;
import cn.lg.soar.system.api.model.*;
import cn.lg.soar.system.tenant.entity.Tenant;
import cn.lg.soar.system.auth.model.MenuTree;

import java.util.List;
import java.util.Set;

/**
 * @author luguoxiang
 * @date 2021/9/5
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface IAccountService {

    /**
     * 修改个人密码
     * @param userPassword
     */
    void updatePassword(UpdatePasswordDTO userPassword);

    /**
     * 修改个人信息
     * @param userInfo
     */
    void updateInfo(UpdateUserInfoDTO userInfo);

    /**
     * 账号信息
     * @param queryEnums
     * @return
     */
    AccountInfoVo getAccountInfo(AccountInfoQueryEnum[] queryEnums, String...systems);

    /**
     * 获取当前账户菜单
     * @param systems 系统
     * @return
     */
    Set<String> permits(String...systems);

    /**
     * 获取当前账户菜单
     * @param systems 系统
     * @return
     */
    List<MenuTree> menus(String...systems);

    /**
     * 角色列表
     * @return
     */
    List<AuthRole> roles();

    /**
     * 组织列表
     * @return
     */
    List<AuthOrg> orgs();

    /**
     * 部门列表
     * @return
     */
    List<AuthDept> depts();

    /**
     * 职位列表
     * @return
     */
    List<AuthPost> posts();

    /**
     * 绑定的账号
     * @return
     */
    List<AuthAccountBind> accounts();

    /**
     * 租户列表
     * @return
     */
    List<Tenant> tenants();

    /**
     * 切换租户
     * @param vo
     */
    String changeTenant(ChangeTenantVO vo);

    /**
     * 解绑账号
     * @param vo
     */
    void unbindAccount(UnbindAccountVO vo);

}
